package com.huike.web.controller.system;

import com.huike.clues.service.ISysDeptService;
import com.huike.common.core.domain.TreeSelect;
import com.huike.common.core.domain.entity.SysDeptDTO;
import com.huike.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description 部门管理相关接口
 * @Date 2023-10-10
 */

@RestController
@RequestMapping("/system/dept")
@Slf4j
@Api(tags = "部门管理接口")
public class SysDeptController {

    @Resource
    private ISysDeptService sysDeptService;

    /**
     * 获取部门列表接口
     *
     * @return
     */
    @GetMapping("/list")
    @ApiOperation("获取部门列表")
    public Result<List<SysDeptDTO>> deptList(SysDeptDTO sysDeptDTO) {
        log.info("开始执行获取部门列表接口...");
        // 返回数据
        return Result.success(sysDeptService.deptList(sysDeptDTO));
    }

    /**
     * 新增部门接口
     *
     * @param dept
     * @return
     */
    @PostMapping()
    @ApiOperation("新增部门")
    public Result addDept(@RequestBody SysDeptDTO dept) {
        log.info("开始执行新增部门接口,{}", dept);
        // 调用业务新增部门
        sysDeptService.addDept(dept);
        return Result.success();
    }

    /**
     * 修改部门接口
     *
     * @param dept
     * @return
     */
    @PutMapping()
    @ApiOperation("修改部门接口")
    public Result updateDept(@RequestBody SysDeptDTO dept) {
        log.info("开始执行修改部门接口,{}", dept);
        // 调用业务实现修改方法
        sysDeptService.updateDept(dept);
        return Result.success();
    }

    /**
     * 查询部门列表接口
     *
     * @param deptId
     * @return
     */
    @GetMapping("/list/exclude/{deptId}")
    @ApiOperation("查询部门列表接口")
    public Result<List<SysDeptDTO>> findDeptList(@PathVariable Integer deptId) {
        log.info("开始执行查询部门列表接口,{}", deptId);
        // 调用业务实现查询部门列表接口方法
        List<SysDeptDTO> sysDeptDTOList = sysDeptService.findDeptList(deptId);
        return Result.success(sysDeptDTOList);
    }

    /**
     * 根据部门编号获取详细信息接口
     *
     * @param deptId
     * @return
     */
    @GetMapping("/{deptId}")
    @ApiOperation("根据部门编号获取详细信息接口")
    public Result<SysDeptDTO> findDept(@PathVariable Integer deptId) {
        log.info("开始执行根据部门编号获取详细信息接口，{}", deptId);
        // 调用业务实现获取对应部门信息的方法
        SysDeptDTO sysDeptDTO = sysDeptService.findDept(deptId);
        return Result.success(sysDeptDTO);
    }

    /**
     * 开始执行删除部门接口
     *
     * @param deptId
     * @return
     */
    @DeleteMapping("/{deptId}")
    @ApiOperation("删除部门接口")
    public Result deleteDept(@PathVariable Integer deptId) {
        log.info("开始执行删除部门接口,{}", deptId);
        // 调用业务实现删除部门方法
        sysDeptService.deleteDept(deptId);
        return Result.success();
    }

    /**
     * 获取部门下拉树列表接口
     *
     * @param sysDeptDTO
     * @return
     */
    @GetMapping("/treeselect")
    @ApiOperation("获取部门下拉树列表")
    public Result<List<TreeSelect>> findDeptTree(SysDeptDTO sysDeptDTO) {
        log.info("开始执行获取部门下拉树列表接口,{}", sysDeptDTO);
        // 调用业务实现获取部门下拉树列表方法
        List<TreeSelect> treeSelectList = sysDeptService.findDeptListBy(sysDeptDTO);
        return Result.success(treeSelectList);
    }


}
